/*
 * Interfaz gráfica del usuario (GUI).
 */
package Interfaz;

import fuente.Usuario;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JLabel;

/**
 * @author Alexandre
 * @author Rodrigo
 * @author Gabriel
 * @author Jeremy
 */

public class Ventana extends javax.swing.JFrame {

    private Usuario _cliente;//Objeto que comunica las interacciones del usuario con la logica
    private String _compuertaSeleccionada;//Almacena el nombre de la compuerta seleccionada por el usuario para crear en el panel
    private int _contadorCompuertasAND;//Mantiene cuenta de la cantidad de compuertasAND creadas, para añadir un identificador al nombre gráficamente
    private int _contadorCompuertasNAND;//Mantiene cuenta de la cantidad de compuertasNAND creadas, para añadir un identificador al nombre gráficamente     
    private int _contadorCompuertasOR;//Mantiene cuenta de la cantidad de compuertasOR creadas, para añadir un identificador al nombre gráficamente
    private int _contadorCompuertasNOR;//Mantiene cuenta de la cantidad de compuertasNOR creadas, para añadir un identificador al nombre gráficamente
    private int _contadorCompuertasNOT;//Mantiene cuenta de la cantidad de compuertasNOT creadas, para añadir un identificador al nombre gráficamente
    private int _contadorCompuertasXOR;//Mantiene cuenta de la cantidad de compuertasXOR creadas, para añadir un identificador al nombre gráficamente
    private int _contadorCompuertasXNOR;//Mantiene cuenta de la cantidad de compuertasXNOR creadas, para añadir un identificador al nombre gráficamente
    
    /**
     * Constructor,
     * Crea una nueva ventana, inicializa el objeto cliente, Inicializa el
     * contador de las compuertas en 1.
     */
    public Ventana() {
        initComponents();        
        setup(); 
        _cliente = new Usuario();
        _compuertaSeleccionada = "";
        _contadorCompuertasAND = _contadorCompuertasNAND = _contadorCompuertasOR = 
        _contadorCompuertasNOR = _contadorCompuertasNOT = _contadorCompuertasXOR = 
        _contadorCompuertasXNOR = 1;
    }

    /**
     * Este método es llamado desde el constructor para inicializar
     * los componentes de la interfaz gráfica.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jFrameNuevo = new javax.swing.JFrame();
        jButtonAceptar = new javax.swing.JButton();
        jButtonCancelar = new javax.swing.JButton();
        jTextFieldNombreA = new javax.swing.JTextField();
        jLabelNombreA = new javax.swing.JLabel();
        jLabelDescripcion = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jLabelNEntradas = new javax.swing.JLabel();
        jSpinnerNEntradas = new javax.swing.JSpinner();
        jScrollPanel = new javax.swing.JScrollPane();
        jPanelPrincipal = new javax.swing.JPanel();
        jPanelMenu = new javax.swing.JPanel();
        jComboBoxCompuertas = new javax.swing.JComboBox();
        jTextFieldBuscar = new javax.swing.JTextField();
        jLabelImagen = new javax.swing.JLabel();
        jPanelPropiedades = new javax.swing.JPanel();
        jMenuBarra = new javax.swing.JMenuBar();
        jMenuArchivo = new javax.swing.JMenu();
        jMenuNuevo = new javax.swing.JMenuItem();
        jMenuCargar = new javax.swing.JMenuItem();
        jMenuGuardar = new javax.swing.JMenuItem();
        jMenuSalir = new javax.swing.JMenuItem();
        jMenuEditar = new javax.swing.JMenu();

        jFrameNuevo.setTitle("Crear Archivo");
        jFrameNuevo.setAlwaysOnTop(true);
        jFrameNuevo.setMinimumSize(new java.awt.Dimension(400, 357));
        jFrameNuevo.setResizable(false);

        jButtonAceptar.setText("Aceptar");
        jButtonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAceptarActionPerformed(evt);
            }
        });

        jButtonCancelar.setText("Cancelar");
        jButtonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonCancelarActionPerformed(evt);
            }
        });

        jLabelNombreA.setText("Nombre del Archivo");

        jLabelDescripcion.setText("Descripción");

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jLabelNEntradas.setText("Número de Entradas");
        jLabelNEntradas.setToolTipText("");

        jSpinnerNEntradas.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(1), Integer.valueOf(1), null, Integer.valueOf(1)));
        jSpinnerNEntradas.setToolTipText("Cantidad de entradas que tendra el diseño logico.");

        javax.swing.GroupLayout jFrameNuevoLayout = new javax.swing.GroupLayout(jFrameNuevo.getContentPane());
        jFrameNuevo.getContentPane().setLayout(jFrameNuevoLayout);
        jFrameNuevoLayout.setHorizontalGroup(
            jFrameNuevoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jFrameNuevoLayout.createSequentialGroup()
                .addGap(69, 69, 69)
                .addComponent(jButtonAceptar)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 100, Short.MAX_VALUE)
                .addComponent(jButtonCancelar)
                .addGap(85, 85, 85))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jFrameNuevoLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jFrameNuevoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabelDescripcion, javax.swing.GroupLayout.PREFERRED_SIZE, 85, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jFrameNuevoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                        .addComponent(jTextFieldNombreA)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 345, Short.MAX_VALUE)
                        .addComponent(jLabelNombreA, javax.swing.GroupLayout.Alignment.LEADING))
                    .addGroup(jFrameNuevoLayout.createSequentialGroup()
                        .addComponent(jLabelNEntradas)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jSpinnerNEntradas, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(25, 25, 25))
        );
        jFrameNuevoLayout.setVerticalGroup(
            jFrameNuevoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jFrameNuevoLayout.createSequentialGroup()
                .addGap(9, 9, 9)
                .addComponent(jLabelNombreA, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jTextFieldNombreA, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(jFrameNuevoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabelNEntradas, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jSpinnerNEntradas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jLabelDescripcion, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 145, Short.MAX_VALUE)
                .addGap(18, 18, 18)
                .addGroup(jFrameNuevoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jButtonAceptar)
                    .addComponent(jButtonCancelar))
                .addGap(20, 20, 20))
        );

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("LogiCTec");
        setResizable(false);

        jPanelPrincipal.setBackground(new java.awt.Color(255, 255, 255));
        jPanelPrincipal.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jPanelPrincipalMouseClicked(evt);
            }
        });

        javax.swing.GroupLayout jPanelPrincipalLayout = new javax.swing.GroupLayout(jPanelPrincipal);
        jPanelPrincipal.setLayout(jPanelPrincipalLayout);
        jPanelPrincipalLayout.setHorizontalGroup(
            jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 1049, Short.MAX_VALUE)
        );
        jPanelPrincipalLayout.setVerticalGroup(
            jPanelPrincipalLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 553, Short.MAX_VALUE)
        );

        jScrollPanel.setViewportView(jPanelPrincipal);

        jComboBoxCompuertas.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Elija la Compuerta", "AND", "NAND", "NOR", "NOT", "OR", "XNOR", "XOR" }));
        jComboBoxCompuertas.setEnabled(false);
        jComboBoxCompuertas.addItemListener(new java.awt.event.ItemListener() {
            public void itemStateChanged(java.awt.event.ItemEvent evt) {
                jComboBoxCompuertasItemStateChanged(evt);
            }
        });

        jTextFieldBuscar.setText("Buscar");

        jLabelImagen.setBorder(javax.swing.BorderFactory.createTitledBorder("Vista Previa"));

        jPanelPropiedades.setBorder(javax.swing.BorderFactory.createTitledBorder("Propiedades"));

        javax.swing.GroupLayout jPanelPropiedadesLayout = new javax.swing.GroupLayout(jPanelPropiedades);
        jPanelPropiedades.setLayout(jPanelPropiedadesLayout);
        jPanelPropiedadesLayout.setHorizontalGroup(
            jPanelPropiedadesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 268, Short.MAX_VALUE)
        );
        jPanelPropiedadesLayout.setVerticalGroup(
            jPanelPropiedadesLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 243, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout jPanelMenuLayout = new javax.swing.GroupLayout(jPanelMenu);
        jPanelMenu.setLayout(jPanelMenuLayout);
        jPanelMenuLayout.setHorizontalGroup(
            jPanelMenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelMenuLayout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addGroup(jPanelMenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabelImagen, javax.swing.GroupLayout.PREFERRED_SIZE, 209, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jTextFieldBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 209, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jComboBoxCompuertas, javax.swing.GroupLayout.PREFERRED_SIZE, 209, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(23, 23, 23))
            .addGroup(jPanelMenuLayout.createSequentialGroup()
                .addComponent(jPanelPropiedades, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(0, 0, Short.MAX_VALUE))
        );
        jPanelMenuLayout.setVerticalGroup(
            jPanelMenuLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanelMenuLayout.createSequentialGroup()
                .addGap(35, 35, 35)
                .addComponent(jTextFieldBuscar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(jComboBoxCompuertas, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(13, 13, 13)
                .addComponent(jLabelImagen, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(59, 59, 59)
                .addComponent(jPanelPropiedades, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        jMenuArchivo.setText("Archivo");

        jMenuNuevo.setText("Nuevo");
        jMenuNuevo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jMenuNuevoActionPerformed(evt);
            }
        });
        jMenuArchivo.add(jMenuNuevo);

        jMenuCargar.setText("Cargar");
        jMenuArchivo.add(jMenuCargar);

        jMenuGuardar.setText("Guardar");
        jMenuArchivo.add(jMenuGuardar);

        jMenuSalir.setText("Salir");
        jMenuArchivo.add(jMenuSalir);

        jMenuBarra.add(jMenuArchivo);

        jMenuEditar.setText("Editar");
        jMenuBarra.add(jMenuEditar);

        setJMenuBar(jMenuBarra);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jPanelMenu, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 858, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(76, 76, 76))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanelMenu, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jScrollPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    
    //////////////Métodos de acciones y eventos de los componentes//////////////
    /**
     * Inicia una nueva ventana con las opciones para que el 
     * ususario comience un nuevo diseño lógico.
     * @param evt Evento ejecutable al presionar el boton
     */
    private void jMenuNuevoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuNuevoActionPerformed
        menuNuevo();
    }//GEN-LAST:event_jMenuNuevoActionPerformed
    
    /**
     * Evento del boton aceptar de la ventana de pciones para comenzar un nuevo diseño,
     * Inicializa el objeto Usuario con los parámetros necesarios para almacenar
     * y ejecutar sus funciones y métodos.
     * @param evt Evento ejecutable al presionar el boton
     */
    private void jButtonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAceptarActionPerformed
        setCliente();
        jComboBoxCompuertas.setEnabled(true);
    }//GEN-LAST:event_jButtonAceptarActionPerformed

    /**
     * Eento del boton de la ventana de opciones para comenzar un nuevo diseño,
     * cancela y cierra la ventana.
     * @param evt Evento ejecutable al presionar el boton
     */
    private void jButtonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonCancelarActionPerformed
        jFrameNuevo.dispose();
        jTextArea1.setText(null);
        jTextFieldNombreA.setText(null);
        jSpinnerNEntradas.setValue(1);
    }//GEN-LAST:event_jButtonCancelarActionPerformed

    /**
     * Evento que ejecuta el comboBox que se encuentra en la ventana principal, 
     * llama a métodos auxiliares para ejecutar una acción al cambiar el item
     * en el componente, y almacena este cambio en la variable _compuertaSeleccionada.
     * @param evt Evento ejecutable
     */
    private void jComboBoxCompuertasItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_jComboBoxCompuertasItemStateChanged
        try {
            _compuertaSeleccionada = (String) jComboBoxCompuertas.getSelectedItem();
            setVistaPreviaCompuerta();
        } catch (IOException ex) {
            Logger.getLogger(Ventana.class.getName()).log(Level.SEVERE, null, ex);
        }
    }//GEN-LAST:event_jComboBoxCompuertasItemStateChanged

    /**
     * Ejecuta acciones al presionar el click derecho del mouse en el panel
     * principal del editor.
     * @param evt Evento ejecutable
     */
    private void jPanelPrincipalMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jPanelPrincipalMouseClicked
        /* Crear el componente gráficamente. */
        crearCompuertaGraf();
        _cliente.crearCompuerta(_compuertaSeleccionada);
    }//GEN-LAST:event_jPanelPrincipalMouseClicked
////////////////////////////////////////////////////////////////////////////////
    
    
    /**
     * Crea una compuerta gráficamente en el panel principal, en forma de labe.
     */
    private void crearCompuertaGraf() {
        int cont = 0;
        switch (_compuertaSeleccionada) {
            case "AND":
                cont = _contadorCompuertasAND;
                _contadorCompuertasAND++;
                break;
            case "NAND":
                cont = _contadorCompuertasNAND;
                _contadorCompuertasNAND++;
                break;
            case "OR":
                cont = _contadorCompuertasOR;
                _contadorCompuertasOR++;
                break;
            case "NOR":
                cont = _contadorCompuertasNOR;
                _contadorCompuertasNOR++;
                break;
            case "NOT":
                cont = _contadorCompuertasNOT;
                _contadorCompuertasNOT++;
                break;
            case "XOR":
                cont = _contadorCompuertasXOR;
                _contadorCompuertasXOR++;
                break;
            case "XNOR":
                cont = _contadorCompuertasXNOR;
                _contadorCompuertasXNOR++;
                break;
        }
        
        JLabel compuerta = new JLabel(_compuertaSeleccionada+cont);
        compuerta.setHorizontalAlignment(JLabel.CENTER);
        compuerta.setBorder(javax.swing.BorderFactory.createLineBorder(Color.black));
        
        int posX = (jPanelPrincipal.getMousePosition().x)-30;
        int posY = (jPanelPrincipal.getMousePosition().y)-30;
        
        compuerta.setBounds(posX, posY, 60, 60);
        jPanelPrincipal.add(compuerta);
        jPanelPrincipal.repaint();
    }
    
    /**
     * Establece una vita previa mostrada en un label, de la imágen que representa
     * la compuerta lógica que va a ser creada.
     * @throws IOException Excepción que se ejecuta al no poder leer el archivo
     */
    private void setVistaPreviaCompuerta() throws IOException {
        Image img = cargarImagenes ();
        
        Image resizedImage = img.getScaledInstance(jLabelImagen.getWidth(), jLabelImagen.getHeight(), 0);
        ImageIcon icon = new ImageIcon(resizedImage);        
        
        jLabelImagen.setIcon(icon);
    }
    /**
     * Función auxiliar llamada por el método setVistaPreviaCompuerta,
     * busca en fichero y carga una imágen a partir de su nombre
     * @return Imágen cargada desde un fichero
     * @throws IOException Excepción mostrada al no poder leer un archivo
     */
    private Image cargarImagenes () throws IOException {
        String Nombrecompuerta = (String) jComboBoxCompuertas.getSelectedItem();
        
        File f = new File("src/Imagenes/"+Nombrecompuerta+".jpg");
        Image img = ImageIO.read(f);
        
        return img;
    }
    
    /**
     * Este método es llamado al iniciar un nuevo diseño por parte del usuario
     * Inicializa los atributos del objeto usuario: nombre del diseño,
     * la descripción y la cantidad de entradas.
     */
    private void setCliente() {
        _cliente.setNombre(jTextFieldNombreA.getText());
        _cliente.setDescripcion(jTextArea1.getText());
        _cliente.setEntradas((int) jSpinnerNEntradas.getValue());        
        //System.out.println(_cliente.getEntradas()+_cliente.getDescripcion()+_cliente.getNombre());
        jFrameNuevo.dispose();
        jTextArea1.setText(null);
        jTextFieldNombreA.setText(null);
        jSpinnerNEntradas.setValue(1);
    }
    
    /**
     * Abre la ventana del menu para iniciar un nuevo diseño.
     */
    private void menuNuevo(){        
        jFrameNuevo.setVisible(true);
    }
    
    /**
     * Establece e inicializa la ventana principal.
     */
    private void setup(){
        this.setExtendedState(Ventana.MAXIMIZED_BOTH);
        jPanelPrincipal.setSize(new Dimension(2000, 3000));
        gridVentana();
        this.setLayout(new BorderLayout());
        this.add(jPanelMenu, BorderLayout.WEST);
        this.add(jScrollPanel, BorderLayout.EAST);  
        this.pack();
    }
    /**
     * Metodo que es llamado en el setup() de la interfaz para conseguir el 
     * tamaño de la ventana y poner el tamaño correcto del scroll panel.
     * @return La dimension del scroll panel.
     */
    private Dimension jScrollPanelTamano(){
        Dimension Panel = jPanelPrincipal.getSize();
        int h = (int) Panel.getHeight();
        int w = (int) Panel.getWidth();
        
        w =- 250;
        
        return  new Dimension (w, h);      
    }

    /**
     * Metodo que dibuja puntos en las intersecciones de del panel para 
     * brindar como referecia donde dibujar las lineas e insertar componentes.
     */
    private void gridVentana(){
        Graphics PanelG = jPanelPrincipal.getGraphics();
        Grid.pintar(PanelG);
        Dimension PanelD = jPanelPrincipal.getSize();
    } 
    
    /**
     * Inicia el hilo de ejecución de la interfaz gráfica.
     * @param args Argumentos de la linea de comandos
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Ventana.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        /* Create and display the form */
        // Listen for value changes in the scroll pane's scrollbars
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Ventana().setVisible(true);
            }
        });
    }
     
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButtonAceptar;
    private javax.swing.JButton jButtonCancelar;
    private javax.swing.JComboBox jComboBoxCompuertas;
    private javax.swing.JFrame jFrameNuevo;
    private javax.swing.JLabel jLabelDescripcion;
    private javax.swing.JLabel jLabelImagen;
    private javax.swing.JLabel jLabelNEntradas;
    private javax.swing.JLabel jLabelNombreA;
    private javax.swing.JMenu jMenuArchivo;
    private javax.swing.JMenuBar jMenuBarra;
    private javax.swing.JMenuItem jMenuCargar;
    private javax.swing.JMenu jMenuEditar;
    private javax.swing.JMenuItem jMenuGuardar;
    private javax.swing.JMenuItem jMenuNuevo;
    private javax.swing.JMenuItem jMenuSalir;
    private javax.swing.JPanel jPanelMenu;
    private javax.swing.JPanel jPanelPrincipal;
    private javax.swing.JPanel jPanelPropiedades;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPanel;
    private javax.swing.JSpinner jSpinnerNEntradas;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextFieldBuscar;
    private javax.swing.JTextField jTextFieldNombreA;
    // End of variables declaration//GEN-END:variables
}
